package com.czh.hander.MetaObject;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.czh.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 自动填充处理器实现类
 */
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
  /**
   * 插入元对象字段填充（用于插入时对公共字段的填充）
   * @param metaObject 元对象
   */
  @Override
  public void insertFill(MetaObject metaObject) {
//    log.info("填充创建人和创建时间.....");
    Long userId;
    try {
      userId = SecurityUtils.getUserId();
    } catch (Exception e) {
      userId = 0L;
    }
    this.setFieldValByName("createTime",new Date(),metaObject);
    this.setFieldValByName("createBy",userId,metaObject);
  }
  /**
   * 更新元对象字段填充（用于更新时对公共字段的填充）
   * @param metaObject 元对象
   */
  @Override
  public void updateFill(MetaObject metaObject) {
//    log.info("填充更新人和更新时间.....");
    try {
      this.setFieldValByName("updateBy",SecurityUtils.getUserId(),metaObject);
      this.setFieldValByName("updateTime",new Date(),metaObject);
    } catch (Exception e) {
      log.info("可能是未登录状态,元对象跳过填充用户信息!");
    }
  }
}